package com.px.project.module.it.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import com.px.common.vo.ResultVo;
import com.px.common.dto.BaseBodyDto;
import com.px.common.dto.BaseQueryDto;
import com.px.common.service.IFileManageService;
import com.px.project.module.it.constant.FileTypeConstant;
import com.px.project.module.it.dto.ProcessDataQueryDto;
import com.px.project.module.it.entity.ProcessData;
import com.px.project.module.it.service.ProcessDataService;
import com.px.project.module.it.vo.ProcessDataVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 智能排产》档案管理》过程资料 前端控制器
 *
 * @author 品讯科技
 * @since 2023-10-24
 */
@RestController
@RequestMapping("/intelligent/process_data")
@RequiredArgsConstructor
public class ProcessDataController {

    private final ProcessDataService processDataService;

    private final IFileManageService fileManageService;


    /**
     * 根据id查询过程资料详情
     *
     * @param id id
     * @return {@link ProcessDataVo }
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/get/{id}")
    public ProcessDataVo getById(@PathVariable("id") Long id) {
        return processDataService.getById(id);
    }

    /**
     * 分页查询过程资料
     *
     * @param pageDto 分页 DTO
     * @param queryDto 查询 DTO
     * @return {@link Page }<{@link ProcessDataVo }>
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/page")
    public Page<ProcessDataVo> page(@Validated BaseQueryDto<ProcessDataVo> pageDto, ProcessDataQueryDto queryDto) {
        return processDataService.page(pageDto, queryDto);
    }

    /**
     * 保存过程资料
     *
     * @param processData 过程资料
     * @return {@link Boolean }
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/save")
    public Boolean save(@RequestBody ProcessData processData) {
        return processDataService.save(processData);
    }

    /**
     * 更新过程资料
     *
     * @param processData 过程资料
     * @return {@link Boolean }
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/update")
    public Boolean update(@RequestBody ProcessData processData) {
        return processDataService.updateById(processData);
    }

    /**
     * 删除过程资料
     *
     * @param dto 请求body基础 DTO
     * @return {@link Boolean }
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/delete")
    public Boolean delete(@RequestBody @Validated BaseBodyDto dto) {
        return processDataService.removeByIds(dto.getIdList());
    }

    /**
     * 上传文件,先上传文件，返回path再保存业务表
     *
     * @param file 文件
     * @return {@link ResultVo }<{@link String }>
     * @throws IOException IO异常
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/uploadFile")
    public ResultVo<String> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        // 返回string类型利用响应对象包裹
        return ResultVo.success(fileManageService.uploadFile(FileTypeConstant.PROCESS_DATA, file));
    }

}
